A true random number generator (TRNG) measures random numbers based on a physical phenomenon that is expected to be random, such as atmospheric noise, thermal noise, or radioactive decay for example. Since the physical phenomenon used as the entropy source for the TRNG is unpredictable, the generated random numbers are truly random. This contrasts with pseudo random number generators (PRNGs), which use mathematical formulae or precalculated tables of random numbers to produce sequences of numbers that appear random, but are actually predictable and deterministic given the initial seed condition used to generate the pseudo random numbers. For many applications, PRNGs are sufficient and these may typically be implemented more cheaply than a TRNG. However, for other applications the true randomness generated by a TRNG is essential and a PRNG may not be sufficient.
Previous work has demonstrated TRNGs based on a resistor-amplifier-ADC chain, oscillator jitter, metastability and other device noise. However, analog designs suffer from variation and noise, making them difficult to integrate with digital circuits. Recent metastability-based methods provide excellent performance but often require careful calibration to remove bias. SiN MOSFETs exploit larger thermal noise but require post-processing to achieve sufficient randomness. An oxide breakdown-based TRNG shows high entropy but suffers from low performance and high energy/bit. Ring oscillator (RO) based TRNGs offer the advantage of design simplicity, but previous methods using a slow jittery clock to sample a fast clock provide low randomness and are vulnerable to power supply attacks. In addition, the majority of previous methods cannot pass all NIST (National Institute of Standards and Technology) randomness tests.
The present technique seeks to provide a TRNG that can simultaneously achieve ease of design, high randomness, good throughput, energy efficiency and resistance to attack.